home *** CD-ROM | disk | FTP | other *** search
/ Greenhouse Effect Detection Expriment / NASA Greenhouse Effect Detection Expriment 1992 - Disc 2.iso / software / dos / cdf22pc / src / tools / wstringv.c < prev   
Encoding:
C/C++ Source or Header  |  1992-02-26  |  2.1 KB  |  81 lines

  1. /******************************************************************************
  2. *
  3. *  NSSDC/CDF                      Write a character string value.
  4. *
  5. *  Version 1.0, 26-Feb-92, Hughes STX
  6. *
  7. *  Modification history:
  8. *
  9. *   V1.0  26-Feb-92, J Love       Original version.
  10. *
  11. ******************************************************************************/
  12.  
  13. #include "cdfdist.h"
  14.  
  15. /******************************************************************************
  16. * WriteStringValue.
  17. ******************************************************************************/
  18.  
  19. void WriteStringValue (fp, numChars, value, ccc, MaXcc)
  20. FILE *fp;
  21. long numChars;
  22. void *value;
  23. int ccc;
  24. int MaXcc;
  25. {
  26. int x, len, i;
  27. int sss;            /* SubString Size. */
  28. int cccBase = ccc;
  29. char *substring;
  30. char *string = (char *) value;
  31. char delim;
  32.  
  33. if (ccc + 1 + numChars + 1 - 1 <= MaXcc) {
  34.   delim = PickDelim (string);
  35.   fprintf (fp, "%c%.*s%c", delim, numChars, string, delim);
  36. }
  37. else {
  38.   sss = MaXcc - ccc - 4 + 1;    /* 4 for starting '"' and ending '" -'
  39.                    (assuming '"' is the delimeter). */
  40.   MALLOC (substring, sss + 1);
  41.   x = 0;
  42.  
  43.   while (x + sss < numChars) {
  44.     if (string[x+sss] == ' ')    /* First character on next line will be a
  45.                    blank. */
  46.       len = sss;
  47.     else
  48.       if (string[x+sss-1] == ' ') /* Last character on this line is a blank. */
  49.         len = sss;
  50.       else {             /* Look for a blank at which to break the line. */
  51.         for (i = x + sss - 2; i > x; i--) if (string[i] == ' ') break;
  52.         if (i > x)
  53.           len = i - x + 1;
  54.         else
  55.           len = sss;
  56.       }
  57.  
  58.     memmove (substring, &string[x], len);
  59.     substring[len] = NUL;
  60.     for (i = 0; i < len; i++) if (!isprint(substring[i])) substring[i] = '.';
  61.     delim = PickDelim (substring);
  62.     ccc += fprintf (fp, "%c%s%c -", delim, substring, delim);
  63.     fprintf (fp, "\n");
  64.     nCHARACTERS (fp, cccBase, ' ');
  65.     ccc = cccBase;
  66.     x += len;
  67.   }
  68.  
  69.   len = numChars - x;
  70.   memmove (substring, &string[x], len);
  71.   substring[len] = NUL;
  72.   for (i = 0; i < len; i++) if (!isprint(substring[i])) substring[i] = '.';
  73.   delim = PickDelim (substring);
  74.   ccc += fprintf (fp, "%c%s%c", delim, substring, delim);
  75.  
  76.   free(substring);
  77. }
  78.  
  79. return;
  80. }
  81.